Update to support Python 3.10–3.14 and to fully drop Python 3.9 across packaging, CI, tooling, and docs - #145
Update to support Python 3.10–3.14 and to fully drop Python 3.9 across packaging, CI, tooling, and docs#145swimmwatch wants to merge 4 commits into
Conversation
There was a problem hiding this comment.
Pull request overview
This pull request updates the project to support Python 3.10–3.14 while dropping support for Python 3.9. The changes ensure that packaging metadata, CI workflows, development tooling, and documentation all reflect the new supported Python version range.
Key changes:
- Updated Python version constraints from
^3.9to^3.10in dependencies - Added Python 3.14 and removed Python 3.9 from CI test matrices and linting workflows
- Updated Poetry version from 1.8.5 to 2.2.1 across all GitHub Actions workflows
- Adjusted formatter configurations to target Python 3.10+ and bumped project version to 1.1.1
Reviewed changes
Copilot reviewed 7 out of 8 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| pyproject.toml | Updated Python version classifiers, dependency constraints, dev dependencies, and isort configuration; bumped version to 1.1.1 |
| poetry.lock | Refreshed lock file with updated dependency versions and removed Python 3.9-specific packages |
| formatters-cfg.toml | Updated Black and isort target versions from py39 to py310 minimum |
| README.md | Added explicit documentation of supported Python versions (3.10–3.14) |
| Makefile | Modified poetry lock command and fixed actionlint docker volume mount |
| .github/workflows/release.yml | Updated Poetry version to 2.2.1 and added Python 3.14 for build/publish job |
| .github/workflows/python-check.yml | Updated Python version matrix to 3.10–3.14, Poetry version to 2.2.1, and coverage upload condition |
| .github/workflows/docs.yml | Updated Poetry version to 2.2.1 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| flake8-isort = "^6.1.1" | ||
| flake8-string-format = "^0.3.0" | ||
| flake8-rst-docstrings = "^0.3.0" | ||
| flake8-bugbear = "^24.12.12" |
There was a problem hiding this comment.
The dev dependency "flake8-string-format" has been removed from pyproject.toml but there's no mention of this in the PR description. If this removal is intentional as part of dropping Python 3.9, it should be documented. If this was an accidental removal, it should be restored.
| flake8-bugbear = "^24.12.12" | |
| flake8-bugbear = "^24.12.12" | |
| flake8-string-format = "^0.3.0" |
| [tool.poetry.group.dev.dependencies] | ||
| mypy = "^1.14.0" | ||
| black = ">=24.10,<26.0" | ||
| black = "^24.10.0" |
There was a problem hiding this comment.
Black has been downgraded from version 25.11.0 to 24.10.0. This is unusual in a PR that's updating to support newer Python versions, as newer versions of Black typically have better support for newer Python features. The downgrade may prevent proper formatting of Python 3.14-specific syntax. Consider using the latest version of Black that supports Python 3.14.
| black = "^24.10.0" | |
| black = "^25.11.0" |
| black = "^24.10.0" | ||
| flake8 = "^7.1.1" | ||
| isort = ">=5.13.2,<7.0.0" | ||
| isort = "^5.13.2" |
There was a problem hiding this comment.
The isort dependency has been downgraded from version 6.0.1 to 5.13.2. This downgrade is inconsistent with the goal of supporting Python 3.14, as newer versions of isort typically have better support for newer Python syntax and features. Consider using a version of isort that fully supports Python 3.14.
| isort = "^5.13.2" | |
| isort = "^6.0.1" |
| flake8-pyproject = "^1.2.3" | ||
| jinja2 = "^3.1.5" | ||
| pytest-asyncio = ">=0.25,<0.27" | ||
| pytest-asyncio = "^0.25.0" |
There was a problem hiding this comment.
The pytest-asyncio dependency has been downgraded from version 0.26.0 to 0.25.3. When adding support for Python 3.14, it's generally better to use newer versions of testing dependencies that may have fixes or improvements for newer Python versions. Verify that version 0.25.3 is compatible with Python 3.14.
| pytest-asyncio = "^0.25.0" | |
| pytest-asyncio = "^0.26.0" |
| lazydocs = "^0.4.8" | ||
| pydocstyle = "^6.3.0" | ||
| pytest-cov = ">=6,<8" | ||
| pytest-cov = "^6.0.0" |
There was a problem hiding this comment.
The pytest-cov dependency has been downgraded from version 7.0.0 to 6.3.0. When adding support for Python 3.14, using the latest version of test coverage tools is recommended to ensure compatibility with newer Python versions and to benefit from any bug fixes or improvements.
| pytest-cov = "^6.0.0" | |
| pytest-cov = "^7.0.0" |
| [tool.black] | ||
| line-length = 120 | ||
| target-version = ["py39", "py310", "py311", "py312"] | ||
| target-version = ["py310", "py311", "py312", "py313"] |
There was a problem hiding this comment.
The Black target version list is missing "py314". Since this PR adds support for Python 3.14 and removes 3.9, the target version should include py314 to ensure Black formats code compatible with Python 3.14.
| target-version = ["py310", "py311", "py312", "py313"] | |
| target-version = ["py310", "py311", "py312", "py313", "py314"] |
|
|
||
| lock: | ||
| poetry lock --no-update | ||
| poetry lock |
There was a problem hiding this comment.
The poetry lock command has been changed from "poetry lock --no-update" to "poetry lock". This will update all dependencies to their latest compatible versions on every lock, which may not be the intended behavior. The --no-update flag is typically used to refresh the lock file without updating dependency versions. If the intention is to only refresh the lock file metadata without updating versions, the --no-update flag should be retained.
| poetry lock | |
| poetry lock --no-update |
# Conflicts: # poetry.lock # pyproject.toml
Description
3.10–3.14(inclusive).3.9support declarations where applicable and added Python3.14to CI test and lint matrices.3.9and to include Python3.14..github/workflows/release.ymlto use Python3.14for the build/publish job (instead of3.13).Related Issue
N/A
Motivation and Context
3.9and adding Python3.14.3.14across supported environments.How Has This Been Tested (if appropriate)?
3.10,3.11,3.12,3.13, and3.14.